python heapq 모듈

파이썬에서 기본적으로 제공하는 heapq 모듈은 우선순위 큐 알고리즘을 제공한다.
리스트를 인덱스 0부터 시작하는 최소힙 형태로 정렬한다.

자세한 사항은 python 공식문서에 잘 서술되어 있다.
https://docs.python.org/ko/3/library/heapq.html

import

import heapq

힙 생성하기

heapq 모듈은 리스트를 최소 힙처럼 다룰 수 있게 도와준다.
즉, 리스트를 힙으로 생성하면 된다.

heap = []

힙에 원소 추가

heappush() 함수를 이용해서 힙에 원소를 추가할 수 있다.

  1. 첫번째 인자는 힙 리스트
  2. 두번째 인자는 추가할 원소
heapq.heappush(heap, 10)
heapq.heappush(heap, 6)
heapq.heappush(heap, 13)
heapq.heappush(heap, 5)
print(heap)
# [5, 6, 13, 10]

힙에서 원소 삭제

heappop() 함수 사용.
가장 작은 원소를 삭제 후에 반환한다.

print(heappop(heap))
# 5

기존 리스트를 힙으로 변환

heapify 함수를 사용

heap = [4, 1, 7, 3, 8, 5]
heapify(heap)
print(heap)
# [1, 3, 5, 4, 8, 7]

max heap은?

음수값 활용

인자를 음수화하고 삽입하고 출력할 때 다시 양수화하는 방법

heapq.heappush(heap, -10)
heapq.heappush(heap, -6)
heapq.heappush(heap, -13)
heapq.heappush(heap, -5)

print(heap)
# [-13, -6, -10, -5]

튜플 사용

음수값 활용과 비슷하지만 튜플로 음수화한 값으로 정렬하고 두번째 요소로 원래 값을 넣는 방법

heapq.heappush(hq, (-1, 1))
heapq.heappush(hq, (-2, 2))
heapq.heappush(hq, (-3, 3))
 
print(heapq.heappop(hq)[1])  # print결과 : 3
print(heapq.heappop(hq)[1])  # print결과 : 2
print(heapq.heappop(hq)[1])  # print결과 : 1

references